package com.sws.quartz.task;

import com.sws.wx_msg_push.service.ReservationReminderService;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;


import lombok.extern.slf4j.Slf4j;

/**
 * 预约提醒定时任务
 */
@Component("ryWxMessageTask")
@Slf4j
public class ReservationReminderTask {
    
    @Autowired
    private ReservationReminderService reminderService;

    /**
     * 默认提前提醒时间（分钟）
     */
    private static final int DEFAULT_REMINDER_MINUTES = 30;

    /**
     * 检查技师预约提醒
     * 检查接下来指定分钟内的技师预约，并发送提醒
     * @param minutes 提前提醒时间（分钟）
     */
//    @Scheduled(cron = "0 */5 * * * ?")
    public void checkStaffReservationReminders(Integer minutes) {
        // 如果未指定分钟数，使用默认值
        int reminderMinutes = (minutes != null && minutes > 0) ? minutes : DEFAULT_REMINDER_MINUTES;
        
        log.info("执行技师预约提醒定时任务，检查未来{}分钟内的预约", reminderMinutes);
        try {
            reminderService.checkAndSendStaffReminders(reminderMinutes);
            log.info("技师预约提醒定时任务执行完成");
        } catch (Exception e) {
            log.error("技师预约提醒定时任务执行异常", e);
        }
    }

    /**
     * 发送顾客预约提醒
     * 检查接下来指定分钟内的顾客预约，并发送提醒
     * @param minutes 提前提醒时间（分钟）
     */
//    @Scheduled(cron = "0 2/5 * * * ?")  // 每5分钟的第2分钟执行，错开客户提醒时间
    public void checkReservationReminders(Integer minutes) {
        // 如果未指定分钟数，使用默认值
        int reminderMinutes = (minutes != null && minutes > 0) ? minutes : DEFAULT_REMINDER_MINUTES;

        log.info("执行顾客预约提醒定时任务，检查未来{}分钟内的预约", reminderMinutes);
        try {
            reminderService.checkAndSendReminders(reminderMinutes);
            log.info("顾客预约提醒定时任务执行完成");
        } catch (Exception e) {
            log.error("顾客预约提醒定时任务执行异常", e);
        }
    }
    
    /**
     * 系统调用的无参方法（保持兼容性）
     */
//    @Scheduled(cron = "0 */5 * * * ?")
    public void checkReservationReminders() {
        checkReservationReminders(DEFAULT_REMINDER_MINUTES);
    }
    
    /**
     * 系统调用的无参方法（保持兼容性）
     */
//    @Scheduled(cron = "0 2/5 * * * ?")
    public void checkStaffReservationReminders() {
        checkStaffReservationReminders(DEFAULT_REMINDER_MINUTES);
    }
} 